//突然想到个几年前学的东西👇
// export与export default均可用于导出常量、函数、文件、模块等。
// 在一个文件或模块中，export、import可以有多个，export default仅有一个。
// 通过export方式导出，在导入时要加 { }，export default则不需要，并可以起任意名称。

// 验证手机号是否合格
// true  合格
// import qs from 'qs'
export function isPhone(phoneStr) {
	let myreg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
	if (!myreg.test(phoneStr)) {
		return false;
	} else {
		return true;
	}
}

// 验证身份证号是否合格
// true 说明合格
export function isIdCard(idCardStr) {
	let idcardReg =
		/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
	if (idcardReg.test(idCardStr)) {
		return true;
	} else {
		return false;
	}
}
// 验证邮箱是否合格
// true 说明合格
export function isEmail(emailStr) {
	let idEmail = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
	if (idEmail.test(emailStr)) {
		return true;
	} else {
		return false;
	}
}
// 验证字符串是否为空
// ture 说明为空  false 说明不为空
export function isEmptyString(string) {
	if (
		string == undefined ||
		typeof string == 'undefined' ||
		!string ||
		string == null ||
		string == '' ||
		/^\s+$/gi.test(string)
	) {
		return true;
	} else {
		return false;
	}
}

// // 断数据类型
// * @param {any} val - 基本类型数据或者引用类型数据
//  * @return {string} - 可能返回的结果有，均为小写字符串
//  * number、boolean、string、null、undefined、array、object、function等

export function getType(val) {
	//判断数据是 null 和 undefined 的情况
	if (val == null) {
		return val + "";
	}
	return typeof(val) === "object" ?
		Object.prototype.toString.call(val).slice(8, -1).toLowerCase() :
		typeof(val);
}

// 验证是否为数字
export function isNumber(n) {
	return !isNaN(parseFloat(n)) && isFinite(n);
}

// 是否为数组
export function isArray(obj) {
	return Object.prototype.toString.call(obj) === '[object Array]';
}

// 是否为空数组
export function isArrayEmpty(val) {
	if (val && val instanceof Array && val.length > 0) {
		return false;
	} else {
		return true;
	}
}
// 获取url参数字符串
export function getQueryString(name) {
	let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
	let r = window.location.search.substr(1).match(reg);
	if (r != null) {
		return unescape(r[2]);
	}
	return null;
}

/**
 * @desc  函数防抖，用于将多次执行变为最后一次执行
 * @param {function} func - 需要使用函数防抖的被执行的函数。必传
 * @param {Number} wait - 多少毫秒之内触发，只执行第一次，默认1000ms。可以不传
 */
export function debounce(fn, delay) {
	delay = delay || 1000; //默认1s后执行
	let timer = null;
	return function() {
		let context = this;
		let arg = arguments;
		console.log(timer);
		if (timer) {
			clearTimeout(timer);
		}
		timer = setTimeout(() => {
			console.log(1111);
			fn.apply(context, arg);
		}, delay);
	};
}
/**
 * 节流函数, 用于将多次执行变为每隔一段时间执行
 * @param fn 事件触发的操作
 * @param delay 间隔多少毫秒需要触发一次事件
 */
export function throttle2(fn, delay) {
	let timer = null;
	return function() {
		let context = this;
		let args = arguments;
		if (!timer) {
			timer = setTimeout(function() {
				fn.apply(context, args);
				clearTimeout(timer);
			}, delay);
		}
	};
}
/**
 * 将字符串时间转换为时间戳
 * @param {string} date
 */
export function getDateTime(date) {
	let timestamp = '';
	if (date) {
		date = date.substring(0, 19);
		date = date.replace(/-/g, '/'); //必须把日期'-'转为'/'
		timestamp = new Date(date).getTime();
	}
	return timestamp;
}
/**
 * 获取年-月-日
 * @data {Any} 时间戳
 */
export function getDates(data) {
	let timeObj = {};
	data = new Date(data);
	let y = data.getFullYear();
	let m =
		data.getMonth() + 1 < 10 ?
		'0' + (data.getMonth() + 1) :
		data.getMonth() + 1;
	let d = data.getDate() < 10 ? '0' + data.getDate() : data.getDate();
	let w = data.getDay();
	switch (w) {
		case 1:
			w = '星期一';
			break;
		case 2:
			w = '星期二';
			break;
		case 3:
			w = '星期三';
			break;
		case 4:
			w = '星期四';
			break;
		case 5:
			w = '星期五';
			break;
		case 6:
			w = '星期六';
			break;
		case 7:
			w = '星期日';
			break;
	}
	let h = data.getHours() < 10 ? '0' + data.getHours() : data.getHours();
	let mi = data.getMinutes() < 10 ? '0' + data.getMinutes() : data.getMinutes();
	let s = data.getSeconds() < 10 ? '0' + data.getSeconds() : data.getSeconds();
	timeObj = {
		year: y + '',
		month: m + '',
		day: d + '',
		week: w + '',
		hour: h + '',
		minute: mi + '',
		second: s + ''
	};
	return timeObj;
}
//公共提示
export function ShowToast(title = '', icon = 'none', position = 'center') {
	uni.showToast({
		title,
		icon,
		position,
		duration: 1500
	});
}
// 扫码功能 
export function ScanCode(scanType = ['qrCode']) {
	return new Promise((resolve, reject) => {
		uni.scanCode({
			onlyFromCamera: true,
			scanType: scanType,
			success: function(res) { // res.scanType: '条码类型', res.result: '条码内容'
			console.log('zheli',res)
				// res.result = JSON.parse(res.result);
				resolve(res.result);
			},
			fail: function(e) {
				ShowToast('掃碼失敗');
				reject();
			}
		});
	});
}
//formData方法封装
export function getFormData(json) {
	const formData = Object.keys(json).forEach(key => qs.stringify(key, json[key]))
	return formData;
}

//获取当前时间
export function getCurrentFormattedTime() {
	const currentDate = new Date();
  
	const year = currentDate.getFullYear();
	const month = String(currentDate.getMonth() + 1).padStart(2, '0');
	const day = String(currentDate.getDate()).padStart(2, '0');
	const hours = String(currentDate.getHours()).padStart(2, '0');
	const minutes = String(currentDate.getMinutes()).padStart(2, '0');
	const seconds = String(currentDate.getSeconds()).padStart(2, '0');
  
	const formattedTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
	return formattedTime;
  }
//获取当前时间特殊格式 
export function getCurrentFormattedTimeNum() {
	const currentDate = new Date();
	const year = currentDate.getFullYear();
	const month = String(currentDate.getMonth() + 1).padStart(2, '0');
	const day = String(currentDate.getDate()).padStart(2, '0');
	const hours = String(currentDate.getHours()).padStart(2, '0');
	const minutes = String(currentDate.getMinutes()).padStart(2, '0');
	const seconds = String(currentDate.getSeconds()).padStart(2, '0');
	const hm = String(currentDate.getMilliseconds()).padStart(2, '0');
	const formattedTime = `${year}${month}${day}${hours}${minutes}${seconds}${hm}`;
	return formattedTime;
  }  
//js相乘浮点精度修正
      /**
       ** 乘法函数，用来得到精确的乘法结果
       ** 说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
       ** 调用：accMul(arg1,arg2)
       ** 返回值：arg1乘以 arg2的精确结果
       **/
export function accMul(arg1, arg2) {
        var m = 0,
          s1 = arg1.toString(),
          s2 = arg2.toString();
        try {
          m += s1.split(".")[1].length;
        } catch (e) {}
        try {
          m += s2.split(".")[1].length;
        } catch (e) {}
        return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
      }
   
      // 给Number类型增加一个mul方法，调用起来更加方便。
      Number.prototype.mul = function (arg) {
        return accMul(arg, this);
      };
  //十六位随机数
export  function getRandom(a,b){
            var max = a;
            var min = b;
            if(a<b){
                max = b;
                min = a;
            }
            return parseInt(Math.random()*(max-min))+min;
        };
export	function suijione(num,maxA,minlA,fqy){
            let arr=[]
            let arr1=[]
            let arr2=[]
            if(num){
                for(let m=0;m<=9;m++){
                    arr.push(m)
                }
            }
            if(maxA){
                for(let m=65;m<=90;m++){
                    arr1.push(m)
                }
            }
            if(minlA){
                for(let m=97;m<=122;m++){
                    arr2.push(m)
                }
            }
            if(!fqy){
                console.log('生成位数必传')
            }
            let mergeArr = arr.concat(arr1);
            let mergeArr1 = mergeArr.concat(arr2);
            let _length=mergeArr1.length
           let text=''
            for(let m=0;m<fqy;m++){
                let text1=''
                let random=getRandom(0,_length)
                if((mergeArr1[random])<=9){
                    text1=mergeArr1[random]
                }else if((mergeArr1[random])>9){
                    text1=String.fromCharCode(mergeArr1[random])
                }
                text+=text1
            }
            return text
        }